/*
 * Vista de la barra menu
 */
package sudoku.Vista;

import java.util.Observable;
import java.util.Observer;
import javax.swing.*;
import javax.swing.JPopupMenu.Separator;
import sudoku.Controlador.SudokuControlador;
import sudoku.Modelo.Juego;

/**
 *
 * @author User
 */

public class BarraMenu extends JMenuBar implements Observer{
    //private final JMenuBar jmbBarraMenu;
    private final JMenu jmJuego,jmDificultad,jmTop10, jmExtras;
    private final JMenuItem jmiNuevo,jmiChequear,jmiGuardar, jmiAbrir, jmiResolver;
    private final JMenuItem jmiTop10Facil,jmiTop10Medio,jmiTop10Dificil;
    private final JMenuItem jmiOtraVista,jmiOtrosSudokus,jmiRegla,jmiAcercaDe;
    private final Separator jsSeparador1, jsSeparador2;
    private final JCheckBoxMenuItem jcbmiAyuda ;
    private final JCheckBoxMenuItem jcbmiFacil,jcbmiMedio,jcbmiDificil;

    /**
    *
    * Constructor Barra MEnu
    */
    public BarraMenu(){   
        super();
        //menJuego
        jmJuego = new JMenu("Juego"); 
        jmiNuevo = new JMenuItem("Nuevo");        
        jmiGuardar = new JMenuItem("Guardar");
        jmiAbrir = new JMenuItem("Abrir");
        jsSeparador1 = new Separator();
        jmiChequear = new JMenuItem("Chequear");
        jcbmiAyuda = new JCheckBoxMenuItem("Ayuda",false);
        jmiResolver = new JMenuItem("Resolver");
        jsSeparador2 = new Separator();
        jmTop10 = new JMenu("Top 10");
        jmiTop10Facil = new JMenuItem("Top 10 Facil");
        jmiTop10Medio = new JMenuItem("Top 10 Medio");
        jmiTop10Dificil = new JMenuItem("Top 10 Dificil");
        
        jmiNuevo.setAccelerator(KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_N, java.awt.event.InputEvent.CTRL_MASK));        
        jmiGuardar.setAccelerator(KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_G, java.awt.event.InputEvent.CTRL_MASK));
        jmiAbrir.setAccelerator(KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_A, java.awt.event.InputEvent.CTRL_MASK));
        jmiChequear.setAccelerator(KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_C, java.awt.event.InputEvent.CTRL_MASK));

        jmJuego.add(jmiNuevo);       
        jmJuego.add(jmiGuardar);
        jmJuego.add(jmiAbrir);
        jmJuego.add(jsSeparador1);
        jmJuego.add(jmiChequear);
        jmJuego.add(jcbmiAyuda);
        jmJuego.add(jmiResolver);
        jmJuego.add(jsSeparador2);
        
        jmJuego.add(jmTop10);
        jmTop10.add(jmiTop10Facil);
        jmTop10.add(jmiTop10Medio);
        jmTop10.add(jmiTop10Dificil);
        
        this.add(jmJuego);
        
        //Menu Dificultad.
        jmDificultad = new JMenu("Dificultad");
        jcbmiFacil = new JCheckBoxMenuItem("Facil",true);
        jcbmiMedio = new JCheckBoxMenuItem("Medio");
        jcbmiDificil = new JCheckBoxMenuItem("Dificil");
        
        jmDificultad.add(jcbmiFacil);
        jmDificultad.add(jcbmiMedio);
        jmDificultad.add(jcbmiDificil);
        
        this.add(jmDificultad);
        
        //Menu Extras.
        jmExtras = new JMenu("Extras");
        jmiOtraVista = new JMenuItem("Cambiar de Vista");
        jmiOtrosSudokus = new JMenuItem("Otros Sudokus");
        jmiRegla = new JMenuItem("Regla");
        jmiAcercaDe = new JMenuItem("Acerca De");
        
        jmExtras.add(jmiOtraVista);
        jmExtras.add(jmiOtrosSudokus);       
        jmExtras.add(jmiRegla);
        jmExtras.add(jmiAcercaDe);
        
        this.add(jmExtras);
    }
    
    /**
     * Metodo llamado cuando el modelo envia notificaciones de actualizacion.
     *
     * @param o     El modelo.
     * @param arg   La accion.
     */

    public void update(Observable o, Object arg) {
        switch ((String)arg) {
            case "Nuevo": this.jmiOtraVista.setEnabled(true);   
            case "Dificultad": setDificultad((Juego) o); break;
            case "Solucionar": this.jmiOtraVista.setEnabled(false); break; 
        }
    }
    
    
    /**
     * Setea el la seleccion de dificultad, en la barra menu,  dependeindo del jeugo dado.
     *
     * @param juego  Juego a consultar la dificultad.
     */
    public void setDificultad(Juego juego){
        jcbmiFacil.setSelected(false);
        jcbmiMedio.setSelected(false);
        jcbmiDificil.setSelected(false);
        int difJ = juego.getDificultad();
        switch (difJ){
            case 1: jcbmiFacil.setSelected(true);break;
            case 2: jcbmiMedio.setSelected(true);break;
            case 3: jcbmiDificil.setSelected(true);break;
    }
    }
    
    /**
     * Agrega controles a todos los componentes.
     *
     * @param botonControlador  Controller which controls all user actions.
     */
    public void setController(SudokuControlador botonControlador) {
        //jmJuego.addActionListener(botonControlador);
        jmiNuevo.addActionListener(botonControlador);
        jmiChequear.addActionListener(botonControlador);
        jmiGuardar.addActionListener(botonControlador);
        jmiAbrir.addActionListener(botonControlador);
        
        jmiChequear.addActionListener(botonControlador);
        jcbmiAyuda.addActionListener(botonControlador);
        jmiResolver.addActionListener(botonControlador);
        
        jmiTop10Facil.addActionListener(botonControlador);
        jmiTop10Medio.addActionListener(botonControlador);
        jmiTop10Dificil.addActionListener(botonControlador);
        
        jcbmiFacil.addActionListener(botonControlador);
        jcbmiDificil.addActionListener(botonControlador);
        jcbmiMedio.addActionListener(botonControlador);
        
        jmiOtraVista.addActionListener(botonControlador);
        jmiOtrosSudokus.addActionListener(botonControlador);
        jmiRegla.addActionListener(botonControlador);
        jmiAcercaDe.addActionListener(botonControlador);
    }
    
}
